{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "initial_id",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    ""
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 1、基础使用\n",
    "\n",
    "举例："
   ],
   "id": "d411f912278adfbd"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T09:58:12.755277Z",
     "start_time": "2025-10-01T09:58:10.392188Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 1.导入相关依赖\n",
    "from langchain_community.document_loaders import TextLoader\n",
    "from langchain_community.vectorstores import FAISS\n",
    "from langchain_openai import OpenAIEmbeddings\n",
    "from langchain_text_splitters import CharacterTextSplitter\n",
    "import os\n",
    "import dotenv\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "\n",
    "# 2.定义文档加载器\n",
    "loader = TextLoader(file_path='./asset/load/09-ai1.txt',encoding=\"utf-8\")\n",
    "\n",
    "# 3.加载文档\n",
    "documents = loader.load()\n",
    "\n",
    "# 4.定义文本切割器\n",
    "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)\n",
    "\n",
    "# 5.切割文档\n",
    "docs = text_splitter.split_documents(documents)\n",
    "\n",
    "# 6.定义嵌入模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "embeddings = OpenAIEmbeddings(\n",
    "    model=\"text-embedding-3-large\"\n",
    ")\n"
   ],
   "id": "13ecbbc603c25bf5",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T09:58:18.059470Z",
     "start_time": "2025-10-01T09:58:15.993670Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 获取向量数据库\n",
    "db = FAISS.from_documents(docs, embeddings)\n",
    "\n",
    "# 基于向量数据库获取检索器\n",
    "retriever = db.as_retriever()\n",
    "\n",
    "# 进行数据的检索\n",
    "docs = retriever.invoke(input = \"深度学习是什么？\")\n",
    "\n",
    "print(len(docs))\n",
    "\n",
    "for doc in docs:\n",
    "    print(f\"------{doc}\")"
   ],
   "id": "8387059eb5f1f42a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "------page_content='人工智能综述：发展、应用与未来展望\n",
      "\n",
      "摘要\n",
      "人工智能（Artificial Intelligence，AI）作为计算机科学的一个重要分支，近年来取得了突飞猛进的发展。本文综述了人工智能的发展历程、核心技术、应用领域以及未来发展趋势。通过对人工智能的定义、历史背景、主要技术（如机器学习、深度学习、自然语言处理等）的详细介绍，探讨了人工智能在医疗、金融、教育、交通等领域的应用，并分析了人工智能发展过程中面临的挑战与机遇。最后，本文对人工智能的未来发展进行了展望，提出了可能的突破方向。\n",
      "\n",
      "1. 引言\n",
      "人工智能是指通过计算机程序模拟人类智能的一门科学。自20世纪50年代诞生以来，人工智能经历了多次起伏，近年来随着计算能力的提升和大数据的普及，人工智能技术取得了显著的进展。人工智能的应用已经渗透到日常生活的方方面面，从智能手机的语音助手到自动驾驶汽车，从医疗诊断到金融分析，人工智能正在改变着人类社会的运行方式。\n",
      "\n",
      "2. 人工智能的发展历程\n",
      "2.1 早期发展\n",
      "人工智能的概念最早可以追溯到20世纪50年代。1956年，达特茅斯会议（Dartmouth Conference）被认为是人工智能研究的正式开端。在随后的几十年里，人工智能研究经历了多次高潮与低谷。早期的研究主要集中在符号逻辑和专家系统上，但由于计算能力的限制和算法的不足，进展缓慢。\n",
      "2.2 机器学习的兴起\n",
      "20世纪90年代，随着统计学习方法的引入，机器学习逐渐成为人工智能研究的主流。支持向量机（SVM）、决策树、随机森林等算法在分类和回归任务中取得了良好的效果。这一时期，机器学习开始应用于数据挖掘、模式识别等领域。\n",
      "2.3 深度学习的突破\n",
      "2012年，深度学习在图像识别领域取得了突破性进展，标志着人工智能进入了一个新的阶段。深度学习通过多层神经网络模拟人脑的工作方式，能够自动提取特征并进行复杂的模式识别。卷积神经网络（CNN）、循环神经网络（RNN）和长短期记忆网络（LSTM）等深度学习模型在图像处理、自然语言处理、语音识别等领域取得了显著成果。' metadata={'source': './asset/load/09-ai1.txt'}\n",
      "------page_content='3. 人工智能的核心技术\n",
      "3.1 机器学习\n",
      "机器学习是人工智能的核心技术之一，通过算法使计算机从数据中学习并做出决策。常见的机器学习算法包括监督学习、无监督学习和强化学习。监督学习通过标记数据进行训练，无监督学习则从未标记数据中寻找模式，强化学习则通过与环境交互来优化决策。\n",
      "3.2 深度学习\n",
      "深度学习是机器学习的一个子领域，通过多层神经网络进行特征提取和模式识别。深度学习在图像识别、自然语言处理、语音识别等领域取得了显著成果。常见的深度学习模型包括卷积神经网络（CNN）、循环神经网络（RNN）和长短期记忆网络（LSTM）。\n",
      "3.3 自然语言处理\n",
      "自然语言处理（NLP）是人工智能的一个重要分支，致力于使计算机能够理解和生成人类语言。NLP技术广泛应用于机器翻译、情感分析、文本分类等领域。近年来，基于深度学习的NLP模型（如BERT、GPT）在语言理解任务中取得了突破性进展。\n",
      "3.4 计算机视觉\n",
      "计算机视觉是人工智能的另一个重要分支，致力于使计算机能够理解和处理图像和视频。计算机视觉技术广泛应用于图像识别、目标检测、人脸识别等领域。深度学习模型（如CNN）在计算机视觉任务中取得了显著成果。\n",
      "\n",
      "4. 人工智能的应用领域\n",
      "4.1 医疗健康\n",
      "人工智能在医疗健康领域的应用包括疾病诊断、药物研发、个性化医疗等。通过分析医学影像和患者数据，人工智能可以帮助医生更准确地诊断疾病，提高治疗效果。\n",
      "4.2 金融\n",
      "人工智能在金融领域的应用包括风险评估、欺诈检测、算法交易等。通过分析市场数据和交易记录，人工智能可以帮助金融机构做出更明智的决策，提高运营效率。\n",
      "4.3 教育\n",
      "人工智能在教育领域的应用包括个性化学习、智能辅导、自动评分等。通过分析学生的学习数据，人工智能可以为学生提供个性化的学习建议，提高学习效果。\n",
      "4.4 交通\n",
      "人工智能在交通领域的应用包括自动驾驶、交通管理、智能导航等。通过分析交通数据和路况信息，人工智能可以帮助优化交通流量，提高交通安全。' metadata={'source': './asset/load/09-ai1.txt'}\n",
      "------page_content='5. 人工智能的挑战与机遇\n",
      "5.1 挑战\n",
      "人工智能发展过程中面临的主要挑战包括数据隐私、算法偏见、安全性问题等。数据隐私问题涉及到个人数据的收集和使用，算法偏见问题则涉及到算法的公平性和透明度，安全性问题则涉及到人工智能系统的可靠性和稳定性。\n",
      "5.2 机遇\n",
      "尽管面临挑战，人工智能的发展也带来了巨大的机遇。人工智能技术的进步将推动各行各业的创新，提高生产效率，改善生活质量。未来，人工智能有望在更多领域取得突破，为人类社会带来更多的便利和福祉。\n",
      "\n",
      "6. 未来展望\n",
      "6.1 技术突破\n",
      "未来，人工智能技术有望在以下几个方面取得突破：一是算法的优化和创新，提高模型的效率和准确性；二是计算能力的提升，支持更复杂的模型和更大规模的数据处理；三是跨学科研究的深入，推动人工智能与其他领域的融合。\n",
      "6.2 应用拓展\n",
      "随着技术的进步，人工智能的应用领域将进一步拓展。未来，人工智能有望在更多领域发挥重要作用，如环境保护、能源管理、智能制造等。人工智能将成为推动社会进步的重要力量。\n",
      "\n",
      "7. 结论\n",
      "人工智能作为一门快速发展的科学，正在改变着人类社会的运行方式。通过不断的技术创新和应用拓展，人工智能将为人类社会带来更多的便利和福祉。然而，人工智能的发展也面临着诸多挑战，需要社会各界共同努力，推动人工智能的健康发展。' metadata={'source': './asset/load/09-ai1.txt'}\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 2、体会不同的检索策略",
   "id": "277bcc6dbba10a5"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T09:59:27.635795Z",
     "start_time": "2025-10-01T09:59:25.265002Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 1.导入相关依赖\n",
    "from langchain_community.vectorstores import FAISS\n",
    "from langchain_openai import OpenAIEmbeddings\n",
    "from langchain_core.documents import Document\n",
    "\n",
    "# 2.定义文档\n",
    "document_1 = Document(\n",
    "    page_content=\"经济复苏：美国经济正在从疫情中强劲复苏，失业率降至历史低点。！\",\n",
    ")\n",
    "document_2 = Document(\n",
    "    page_content=\"基础设施：政府将投资1万亿美元用于修复道路、桥梁和宽带网络。\",\n",
    ")\n",
    "document_3 = Document(\n",
    "    page_content=\"气候变化：承诺到2030年将温室气体排放量减少50%。\",\n",
    ")\n",
    "document_4 = Document(\n",
    "    page_content=\" 医疗保健：降低处方药价格，扩大医疗保险覆盖范围。\",\n",
    ")\n",
    "document_5 = Document(\n",
    "    page_content=\"教育：提供免费的社区大学教育。。\",\n",
    ")\n",
    "document_6 = Document(\n",
    "    page_content=\"科技：增加对半导体产业的投资以减少对外国供应链的依赖。。\",\n",
    ")\n",
    "document_7 = Document(\n",
    "    page_content=\"外交政策：继续支持乌克兰对抗俄罗斯的侵略。\",\n",
    ")\n",
    "document_8 = Document(\n",
    "    page_content=\"枪支管制：呼吁国会通过更严格的枪支管制法律。\",\n",
    ")\n",
    "document_9 = Document(\n",
    "    page_content=\"移民改革：提出全面的移民改革方案。\",\n",
    ")\n",
    "document_10 = Document(\n",
    "    page_content=\"社会正义：承诺解决系统性种族歧视问题。\",\n",
    ")\n",
    "documents = [\n",
    "    document_1,\n",
    "    document_2,\n",
    "    document_3,\n",
    "    document_4,\n",
    "    document_5,\n",
    "    document_6,\n",
    "    document_7,\n",
    "    document_8,\n",
    "    document_9,\n",
    "    document_10,\n",
    "]\n",
    "\n",
    "# 3.创建向量存储\n",
    "embeddings = OpenAIEmbeddings(\n",
    "    model=\"text-embedding-3-large\"\n",
    ")\n",
    "\n",
    "# 4.将文档向量化，添加到向量数据库索引中，得到向量数据库对象\n",
    "db = FAISS.from_documents(documents, embeddings)"
   ],
   "id": "e118663bb1495472",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "① 默认检索器使用相似性搜索",
   "id": "45bc4ccf4a37c74"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T09:59:31.000776Z",
     "start_time": "2025-10-01T09:59:29.551932Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 获取检索器\n",
    "retriever = db.as_retriever(search_kwargs={\"k\": 3}) #这里设置返回的文档数\n",
    "\n",
    "docs = retriever.invoke(\"经济政策\")\n",
    "\n",
    "for i, doc in enumerate(docs):\n",
    "    print(f\"\\n结果 {i+1}:\\n{doc.page_content}\\n\")\n"
   ],
   "id": "9072bfd7f7d6a8f6",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "结果 1:\n",
      "经济复苏：美国经济正在从疫情中强劲复苏，失业率降至历史低点。！\n",
      "\n",
      "\n",
      "结果 2:\n",
      "科技：增加对半导体产业的投资以减少对外国供应链的依赖。。\n",
      "\n",
      "\n",
      "结果 3:\n",
      "外交政策：继续支持乌克兰对抗俄罗斯的侵略。\n",
      "\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "② 分数阈值查询",
   "id": "e90dc7537f9e7189"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T10:02:34.399627Z",
     "start_time": "2025-10-01T10:02:33.131360Z"
    }
   },
   "cell_type": "code",
   "source": [
    "retriever = db.as_retriever(\n",
    "    search_type=\"similarity_score_threshold\",\n",
    "    search_kwargs={\"score_threshold\":0.1}\n",
    ")\n",
    "\n",
    "docs = retriever.invoke(\"经济政策\")\n",
    "\n",
    "for doc in docs:\n",
    "    print(f\"📌 内容: {doc.page_content}\")"
   ],
   "id": "4975312df75ef966",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📌 内容: 经济复苏：美国经济正在从疫情中强劲复苏，失业率降至历史低点。！\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "③ MMR搜索",
   "id": "e420351d1b1d42a"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T10:04:20.817769Z",
     "start_time": "2025-10-01T10:04:19.985468Z"
    }
   },
   "cell_type": "code",
   "source": [
    "retriever = db.as_retriever(\n",
    "    search_type=\"mmr\",\n",
    "    search_kwargs={\"fetch_k\":2}\n",
    ")\n",
    "\n",
    "docs = retriever.invoke(\"经济政策\")\n",
    "\n",
    "print(len(docs))\n",
    "\n",
    "for  doc  in  docs:\n",
    "    print(f\"📌 内容: {doc.page_content}\")"
   ],
   "id": "459b524c73c1ccfa",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "📌 内容: 经济复苏：美国经济正在从疫情中强劲复苏，失业率降至历史低点。！\n",
      "📌 内容: 科技：增加对半导体产业的投资以减少对外国供应链的依赖。。\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 3、结合大模型的使用\n",
    "\n",
    "举例1：不使用RAG技术"
   ],
   "id": "bbb0998b9684ac0d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T10:05:04.913348Z",
     "start_time": "2025-10-01T10:04:55.495467Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "import os\n",
    "import dotenv\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "\n",
    "# 创建大模型实例\n",
    "llm = ChatOpenAI(model=\"gpt-4o-mini\")\n",
    "\n",
    "# 调用\n",
    "response = llm.invoke(\"北京有什么著名的建筑？\")\n",
    "print(response.content)"
   ],
   "id": "434b0816f36a49a9",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "北京作为中国的首都，拥有许多著名的建筑和历史遗址。以下是一些著名的建筑：\n",
      "\n",
      "1. **故宫**（紫禁城） - 明清两代的皇宫，是中国古代建筑的杰出代表，现为故宫博物院。\n",
      "2. **天安门** - 位于天安门广场的正中心，是中国的重要象征，历史悠久。\n",
      "3. **长城** - 虽然长城不是单一建筑，但其众多段落，包括八达岭、慕田峪等，都是标志性的建筑奇迹。\n",
      "4. **颐和园** - 清代的皇家园林，以其优美的自然景观和古典建筑而闻名。\n",
      "5. **天坛** - 明清时期的皇家祭天场所，以其独特的建筑风格和精美的装饰而著称。\n",
      "6. **鸟巢**（国家体育场） - 为2008年北京奥运会而建的现代建筑，以其独特的外形和结构设计而闻名。\n",
      "7. **水立方**（国家游泳中心） - 同样是2008年奥运会的场馆，以独特的泡沫结构而著称。\n",
      "8. **798艺术区** - 原为工业区，现在是现代艺术和文化的聚集地，融合了许多现代艺术展览和创意空间。\n",
      "9. **中国国家大剧院** - 又称“蛋”,以其独特的外观和先进的建筑设计而受到赞誉。\n",
      "10. **昆明湖** - 颐和园内的湖泊，是园林景观的重要组成部分。\n",
      "\n",
      "这些建筑代表了北京丰富的历史和文化遗产，吸引了大量游客和研究者前来参观和探讨。\n"
     ]
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "举例2：通过FAISS构建一个可搜索的向量索引数据库，并结合RAG技术让LLM去回答问题。",
   "id": "4c9fd7234a508ca7"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T10:06:26.496358Z",
     "start_time": "2025-10-01T10:06:19.192353Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 1. 导入所有需要的包\n",
    "from langchain.prompts import PromptTemplate\n",
    "from langchain_openai import ChatOpenAI,OpenAIEmbeddings\n",
    "from langchain_community.document_loaders import TextLoader\n",
    "from langchain.text_splitter import CharacterTextSplitter\n",
    "from langchain_community.vectorstores import FAISS\n",
    "import os\n",
    "import dotenv\n",
    "\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 2. 创建自定义提示词模板\n",
    "prompt_template = \"\"\"请使用以下提供的文本内容来回答问题。仅使用提供的文本信息，如果文本中没有相关信息，请回答\"抱歉，提供的文本中没有这个信息\"。\n",
    "\n",
    "文本内容：\n",
    "{context}\n",
    "\n",
    "问题：{question}\n",
    "\n",
    "回答：\n",
    "\"\n",
    "\"\"\"\n",
    "\n",
    "prompt = PromptTemplate.from_template(prompt_template)\n",
    "\n",
    "# 3. 初始化模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0\n",
    ")\n",
    "\n",
    "embedding_model = OpenAIEmbeddings(model=\"text-embedding-3-large\")\n",
    "\n",
    "# 4. 加载文档\n",
    "loader = TextLoader(\"./asset/load/10-test_doc.txt\", encoding='utf-8')\n",
    "documents = loader.load()\n",
    "\n",
    "# 5. 分割文档\n",
    "text_splitter = CharacterTextSplitter(\n",
    "    chunk_size=1000,\n",
    "    chunk_overlap=100,\n",
    ")\n",
    "texts = text_splitter.split_documents(documents)\n",
    "\n",
    "#print(f\"文档个数:{len(texts)}\")\n",
    "\n",
    "# 6. 创建向量存储\n",
    "vectorstore = FAISS.from_documents(\n",
    "    documents=texts,\n",
    "    embedding=embedding_model\n",
    ")\n",
    "\n",
    "# 7.获取检索器\n",
    "retriever = vectorstore.as_retriever()\n",
    "\n",
    "docs = retriever.invoke(\"北京有什么著名的建筑？\")\n",
    "\n",
    "# 8. 创建Runnable链\n",
    "chain = prompt | llm\n",
    "\n",
    "# 9. 提问\n",
    "result = chain.invoke(input={\"question\":\"北京有什么著名的建筑？\",\"context\":docs})\n",
    "print(\"\\n回答:\", result.content)"
   ],
   "id": "bbd9557bfbce0fc5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "回答: 北京有以下著名的建筑：\n",
      "\n",
      "1. 故宫 - 明清两代的皇家宫殿，世界上现存规模最大、保存最完整的木质结构古建筑群之一。\n",
      "2. 天安门 - 北京的标志性建筑之一，天安门广场是世界上最大的城市广场。\n",
      "3. 颐和园 - 清朝时期的皇家园林，融合了江南园林的设计风格。\n",
      "4. 天坛 - 明清两代皇帝祭天、祈谷的场所，具有深厚的文化内涵。\n",
      "5. 长城（八达岭段） - 最著名的北京段，被誉为\"世界第八大奇迹\"。\n",
      "6. 国家体育场（鸟巢） - 2008年奥运会主体育场，以独特的钢结构设计著称。\n",
      "7. 中央电视台总部大楼 - 现代北京最具争议和识别度的建筑之一。\n",
      "8. 国家大剧院 - 因其蛋壳造型被称为\"巨蛋\"，是世界最大的穹顶建筑之一。\n",
      "9. 北京大兴国际机场 - 超大型国际航空枢纽，被誉为\"新世界七大奇迹\"之一。\n",
      "10. 鼓楼和钟楼 - 古代中国的计时中心，展现了古代的计时智慧。\n"
     ]
    }
   ],
   "execution_count": 8
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
